home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_doom / deep870s.zip / HEXSPECS.DOC < prev    next >
Text File  |  1996-03-29  |  76KB  |  2,728 lines

  1.  
  2.                  HEXEN Specs v1.00
  3.  
  4.              The Official Hexen Technical Specs
  5.          Author: Ben Morris (bmorris@islandnet.com)
  6.         Information from Raven provided by Ben Gokey
  7.        Additional information & corrections by Jack Vermeulen, 
  8.              Sensor Based Systems, Inc.
  9.  
  10.                    [Disclaimer]
  11.  
  12.   The text contained in this document is for informational purposes only.
  13.   If you decide to use this information in any way, neither id Software,
  14.   Raven Software, Ben Morris, nor SBS can be held responsible for any damages
  15.   or losses (including, but not limited to: dismembered bodily parts,
  16.   telefrags and lack of sleep) incurred by this information's use.  Although
  17.   this is an "Official" specification, some of the information contained
  18.   within might be old, or just plain typed in wrong. You have been warned.
  19.  
  20.                      !!!
  21.  
  22.   NB: This version of the specs, 0.9, is a preliminary release.  Most of
  23.       the information here is tried and true, but there's a good chance there
  24.       are errors in the file.  If something doesn't look right, or really IS
  25.       wrong, please contact me (Ben Morris) at the address above.  Please do
  26.       NOT contact me about new versions of the specs; I will release the new
  27.       versions when they are ready.  Thanks.
  28.  
  29.   NOTE :
  30.      This document was edited and reformatted with some additions to
  31.      make it easier to view on screen or to clarify. The form feeds were
  32.      removed to save paper. Sections were corrected or added as noted.
  33.  
  34.  
  35. ┌───┬───────────────────────────────────────────────────────────────────────
  36. │ ■ │ Table of Contents (added to original)
  37. └───┘
  38.  
  39.       1. About this file
  40.       2. Definitions used in this File
  41.       3. Introduction to Hexen
  42.       4. Hexen Data Structures
  43.       5. Hexen Script Language
  44.       6. Flats with special properties
  45.       7. The MAPINFO lump
  46.       8. PolyObjects
  47.       9. List of Spawnable Objects
  48.      10. List of Activateable/Deactivateable Objects
  49.      11. List of THINGS that require arguments 
  50.      12. Sector Specials
  51.      13. Action Specials 
  52.      14. Sector Sounds for ChangeSectorSound() special
  53.      15. Sounds for ThingSound()  (added)
  54.      16. Key Numbers 
  55.  
  56.  
  57.  
  58. ┌───┬───────────────────────────────────────────────────────────────────────
  59. │ 1 │ About This File
  60. └───┘
  61.  
  62.   This file was written for those who are interested in the inner workings of
  63.   Hexen.  It doesn't contain playing tips or information on how to get Hexen
  64.   working on your system.
  65.  
  66.   This file is intended to be supplementary to Matt Fell's "Unofficial DOOM
  67.   Specs", which probably came with your copy of DOOM or DOOM ][.  Wherever
  68.   it's relevant, this file refers to a specific section in the DOOM specs (be
  69.   sure you have version 1.666 or later!), so it's a good idea to have a copy
  70.   at hand.
  71.  
  72.   You can also refer to the online Help in DeeP for further reference to
  73.   basic definitions.
  74.  
  75. ┌───┬───────────────────────────────────────────────────────────────────────
  76. │ 2 │ Definitions used in this File
  77. └───┘
  78.  
  79.       Angle [0..255]  Used in "angle" parameters to Special types:
  80.  
  81.         0       East            32      Northeast
  82.         64      North           96      Northwest
  83.         128     West            160     Southwest
  84.         192     South           224     Southeast
  85.  
  86.           * NOTE that this differs from DOOM/Heretic in that 45/90
  87.         degree increments are not used.  However, this difference
  88.         does _not_ apply for the angles used for the THINGS in
  89.         map editing - they are the same as DOOM's (eg: 0 = East,
  90.         90 = North, etc.)
  91.  
  92.      Tics       Time unit of length 1/35 second.  So, 35 tics = 1 second.
  93.  
  94.      Octics     Time unit of length 8 tics.  So, 8 octics = 1 second.
  95.  
  96.  
  97. ┌───┬───────────────────────────────────────────────────────────────────────
  98. │ 3 │ Introduction to Hexen
  99. └───┘
  100.  
  101.   Hexen is the sequel to Heretic, Raven Software's first collaboration with id
  102.   Software.
  103.  
  104.   Hexen's major difference from Heretic and DOOM is its programmability.  
  105.   Hexen features a powerful script language that can be used to create a wide 
  106.   variety of in-game effects such as traps, puzzles and even earthquakes!
  107.  
  108.  
  109. ┌─────┬─────────────────────────────────────────────────────────────────────
  110. │ 4   │ Hexen Data Structures
  111. └─────┘
  112.  
  113.   This section outlines the format of the new data blocks in a Hexen map - 
  114.   the LINEDEF and THING structures.  These structures have changed from the
  115.   versions used in DOOM and Heretic [see DOOM Specs ref and DeeP help].
  116.  
  117.    The Hexen LINEDEF structure
  118.    ---------------------------
  119.  
  120.     Offset      Size        Meaning
  121.     ---------------------------------------------------
  122.     0           word        the line's start-vertex
  123.     2           word        the line's end-vertex
  124.     4           word        line flags (see below)
  125.     6           byte        special type (see [Specials])
  126.     7         5 bytes       special arguments
  127.     12          word        the line's right sidedef number
  128.     14          word        the line's left sidedef number
  129.  
  130.  
  131.     Line Flags
  132.     ----------
  133.  
  134.     The following flags are starred with an asterisk if they're new for
  135.     Hexen:
  136.  
  137.     Bits        Meaning when Set
  138.     ---------------------------------------------------
  139.     0           impassable - the line cannot be crossed.
  140.     1           impassable to monsters only.
  141.     2           two-sided
  142.     3           upper texture is unpegged        (drawn from top-down)
  143.     4           lower/middle texture is unpegged (drawn from bottom-up)
  144.     5           secret - the line appears as impassable on the automap.
  145.     6           sound can't travel through the line for monsters' ears.
  146.     7           never draw the line on the auto-map, even with the
  147.         map cheat enabled.
  148.     8           the line is always drawn on the auto-map, even if it
  149.         hasn't been seen by the player.
  150.  
  151.   * 9           the line's special ([3-1]) is repeatable, ie: it can
  152.         be activated more than once.
  153.   * 10..12      the line's special activation, ie: how the special is
  154.         activated.
  155.  
  156.         Value   Activated when...
  157.         ---------------------------------------------
  158.         0       Player crosses the line
  159.         1       Player uses the line with the use key
  160.         2       Monster crosses the line
  161.         3       Projectile impacts the wall
  162.         4       Player pushes the wall
  163.         5       Projectile crosses the line
  164.  
  165.         To get the special activation, use the following formula:
  166.  
  167.         activation := (line.flags BITAND 0x1C00) BITSHIFTRIGHT 10
  168.  
  169.  
  170.     The Hexen THING structure
  171.     --------------------------
  172.  
  173.     Offset      Size        Meaning
  174.     ---------------------------------------------------
  175.   * 0           word        thing ID - used in scripts and specials to
  176.                 identify a THING or a set of THINGs.
  177.     2           word        x-position on the map
  178.     4           word        y-position on the map
  179.   * 6           word        starting altitude on the map - the THING
  180.                 is created at this altitude above the floor
  181.                 of the sector it's in when the map is entered,
  182.                 and is immediately subjected to gravity.
  183.     8           word        the angle the thing is facing when the map
  184.                 is entered.
  185.     10          word        the thing type (see below)
  186.   * 12          word        thing flags    (see below)
  187.     14          byte        special type (see [Specials]).  a thing's
  188.                 special is activated when the thing is
  189.                 killed (Monster), destroyed (Tree, Urn, etc.),
  190.                 or picked up (Artifact, Puzzle Piece.)
  191.     15        5 bytes       special arguments, 1 byte each
  192.  
  193.  
  194.    Thing Flags
  195.    -----------
  196.  
  197.    The following flags are starred with an asterisk if they're new for
  198.    Hexen:
  199.  
  200.     Bits        Meaning when Set
  201.     ---------------------------------------------------
  202.     0           the thing appears on the Easy skill settings (1-2)
  203.     1           the thing appears on the Normal skill setting (3)
  204.     2           the thing appears on the Hard skill settings (4-5)
  205.     3           the thing is deaf - it sits around until it's
  206.         hurt, or until it sees a player.
  207.   * 4           the thing is dormant - it never wakes up until it's
  208.         activated using the Thing_Activate() special.
  209.   * 5           the thing appears for the Fighter class.
  210.   * 6           the thing appears for the Cleric class.
  211.   * 7           the thing appears for the Mage class.
  212.   * 8           the thing appears in single-player games.
  213.   * 9           the thing appears in cooperative games.
  214.   * 10          the thing appears in deathmatch games.
  215.  
  216.  
  217.   Each "thing appears" flag must be set for each condition under which the
  218.   thing is to appear.  For multi-player games involving more than one
  219.   class, a thing that is set for one of the classes involved will also appear
  220.   for the other two classes in the game.
  221.  
  222.   For example, if you set the three pieces of the Fighter's sword to appear
  223.   for only the Fighter (bit 5 is set) and in Deathmatch (bit 10 is set),
  224.   if a Mage or a Cleric is also playing, the pieces of the sword will be
  225.   visible to them, too.
  226.  
  227.  
  228.   Thing Types
  229.   -----------
  230.  
  231.   Creatures as well as some objects can be activated and/or deactivated with
  232.   the ThingActivate and ThingDeactivate line specials.
  233.  
  234.   Creatures will freeze when deactivated and resume when activated.
  235.   Activation can also be used to bring a "dormant" creature to life.
  236.  
  237.   If a creature has a special, that special will be activated upon its death.
  238.   Also, if the creature is teleported away using the banishment device
  239.   (teleport other), the special will be activated and then removed from the
  240.   creature.
  241.  
  242.   [ Sorted list created by SBS, original was hard to find stuff in ]
  243.  
  244.     Type      Name
  245.     -----------------------------------------------------------
  246.     1         Player_1_start
  247.     2         Player_2_start
  248.     3         Player_3_start
  249.     4         Player_4_start
  250.     5         Z_WingedStatue
  251.     6         ZC_Rock1
  252.     7         ZC_Rock2
  253.  
  254.     9         ZC_Rock3
  255.     10        2C_SerpentStaff
  256.     11        Player_Deathmatch
  257.     12        4F_3Blade
  258.     13        4F_2Crosspiece
  259.     14        Player_TeleportSpot
  260.     15        ZC_Rock4
  261.     16        4F_1Hilt
  262.     17        Z_Chandelier
  263.     18        4C_3Arc
  264.     19        4C_2Cross
  265.  
  266.     20        4C_1Shaft
  267.     21        4M_3Skull
  268.     22        4M_2Stub
  269.     23        4M_1Stick
  270.     24        ZF_TreeDead
  271.     25        ZF_TreeDestructible
  272.     26        ZS_Tree2
  273.     27        ZS_Tree1
  274.     28        ZF_StumpBurned
  275.     29        ZF_StumpBare
  276.  
  277.     30        A_Porkelator
  278.     31        C_Demon
  279.     32        A_HealingComplete (Urn)
  280.     33        A_Torch
  281.     34        C_Wraith
  282.     36        A_ChaosDevice
  283.     37        ZS_Stump1
  284.     38        ZS_Stump2
  285.     39        ZF_ShroomLarge1
  286.  
  287.     40        ZF_ShroomLarge2
  288.     41        ZC_ShroomLarge3
  289.     42        ZC_ShroomSmall1
  290.  
  291.     44        ZC_ShroomSmall2
  292.     45        ZC_ShroomSmall3
  293.     46        ZF_ShroomSmall1
  294.     47        ZF_ShroomSmall2
  295.     48        ZC_Stalagmite_Pillar
  296.     49        ZC_StalagmiteLarge
  297.  
  298.     50        ZC_StalagmiteMedium
  299.     51        ZC_StalagmiteSmall
  300.     52        ZC_StalactiteLarge
  301.     53        2M_ConeOfShards
  302.     54        Z_Wall_Torch_Lit
  303.     55        Z_Wall_Torch_Unlit
  304.     56        ZC_StalactiteMedium
  305.     57        ZC_StalactiteSmall
  306.     58        ZS_Moss1
  307.     59        ZS_Moss2
  308.  
  309.     60        ZS_Vine
  310.     61        ZG_CorpseKabob
  311.     62        ZG_CorpseSleeping
  312.     63        ZG_TombstoneRIP
  313.     64        ZG_TombstoneShane
  314.     65        ZG_TombstoneBigCross
  315.     66        ZG_TombstoneBrianR
  316.     67        ZG_TombstoneCrossCircle
  317.     68        ZG_TombstoneSmallCross
  318.     69        ZG_TombstoneBrianP
  319.  
  320.     71        ZG_CorpseHanging
  321.     72        ZP_GargPortalTall
  322.     73        ZP_GargIceTall
  323.     74        ZP_GargPortalShort
  324.     76        ZP_GargIceShort
  325.     77        Z_Banner
  326.     78        ZF_TreeLarge1
  327.     79        ZF_TreeLarge2
  328.  
  329.     80        ZF_TreeGnarled1
  330.     81        A_HealingWimpy (Vial)
  331.     82        A_HealingHefty (Flask)
  332.     83        A_WingsOfWrath
  333.     84        A_IconOfDefender
  334.     86        A_DarkServant
  335.     87        ZF_TreeGnarled2
  336.     88        ZS_Log
  337.     89        ZI_IcicleLarge
  338.  
  339.     90        ZI_IcicleMedium
  340.     91        ZI_IcicleSmall
  341.     92        ZI_IcicleTiny   (missing in spec)
  342.     93        ZI_IceSpikeLarge
  343.     94        ZI_IceSpikeMedium
  344.     95        ZI_IceSpikeSmall
  345.     96        ZI_IceSpikeTiny (missing in spec)
  346.     97        ZW_RockBrownLarge
  347.     98        ZW_RockBrownSmall
  348.     99        ZW_RockBlack
  349.  
  350.     100       ZM_Rubble1
  351.     101       ZM_Rubble2
  352.     102       ZM_Rubble3
  353.     103       Z_VasePillar
  354.     104       ZM_Pot1
  355.     105       ZM_Pot2
  356.     106       ZM_Pot3
  357.     107       C_Centaur
  358.     108       ZG_CorpseLynched
  359.     109       ZG_CorpseNoHeart
  360.  
  361.     110       ZG_CorpseSitting
  362.     111       ZG_BloodPool
  363.  
  364.     113       Spawn_Leaf
  365.     114       C_Bishop
  366.     115       C_CentaurLeader
  367.     116       Z_TwinedTorch
  368.     117       Z_TwinedTorch_Unlit
  369.     118       Z_GlitterBridge
  370.     119       Z_Candle
  371.  
  372.     120       C_SerpentLeader
  373.     121       C_Serpent
  374.     122       Mana_1
  375.     123       3F_Hammer
  376.     124       Mana_2
  377.  
  378.     140       Z_TeleportSmoke
  379.  
  380.     254       C_Dragon  (Death Wyvern)
  381.  
  382.     1400      SS_Stone
  383.     1401      SS_Heavy
  384.     1402      SS_Metal
  385.     1403      SS_Creak
  386.     1404      SS_Silent
  387.     1405      SS_Lava
  388.     1406      SS_Water
  389.     1407      SS_Ice
  390.     1408      SS_EarthCrack
  391.     1409      SS_Metal2
  392.     1410      SE_Wind
  393.  
  394.     3000      PO_Anchor
  395.     3001      PO_StartSpot
  396.     3002      PO_StartSpot_Crush
  397.  
  398.     8000      A_Repulsion
  399.     8002      A_BootsOfSpeed
  400.     8003      A_BoostMana
  401.     8004      ManaCombined
  402.     8005      Ar_Armor
  403.     8006      Ar_Shield
  404.     8007      Ar_Helmet
  405.     8008      Ar_Amulet
  406.     8009      3C_Firestorm
  407.     8010      2F_Axe
  408.     8020      C_IceGuy
  409.  
  410.     8030      K_SteelKey
  411.     8031      K_CaveKey
  412.     8032      K_AxeKey
  413.     8033      K_FireKey
  414.     8034      K_EmeraldKey    (was CastleKey)
  415.     8035      K_DungeonKey
  416.     8036      K_SilverKey
  417.     8037      K_RustyKey
  418.     8038      K_WasteKey
  419.     8039      K_SwampKey
  420.  
  421.     8040      3M_Lightning
  422.     8041      A_Bracers
  423.     8042      Z_FireBull
  424.     8043      Z_FireBull_Unlit
  425.     8044      ZP_GargCorrode
  426.     8045      ZP_GargLavaDrkTall
  427.     8046      ZP_GargLavaBrtTall
  428.     8047      ZP_GargBrnzTall
  429.     8048      ZP_GargStlTall
  430.     8049      ZP_GargLavaDrkShort
  431.     8050      ZP_GargLavaBrtShort
  432.     8051      ZP_GargBrnzShort
  433.     8052      ZP_GargStlShort
  434.  
  435.     8060      Z_FireSkull
  436.     8061      Z_BrassBrazier
  437.     8062      ZF_DestructibleTree
  438.     8063      Z_Chandelier_Unlit
  439.     8064      Z_ArmorSuit
  440.     8065      Z_Bell
  441.     8066      Z_BlueCandle
  442.     8067      ZG_IronMaiden
  443.     8068      ZF_Hedge
  444.     8069      Z_Cauldron
  445.     8070      Z_Cauldron_Unlit
  446.     8071      Z_Chain32
  447.     8072      Z_Chain64
  448.     8073      Z_ChainHeart
  449.     8074      Z_ChainLHook
  450.     8075      Z_ChainSHook
  451.     8076      Z_ChainSpikeBall
  452.     8077      Z_ChainSkull
  453.  
  454.     8080      C_Demon2
  455.  
  456.     8100      Z_Barrel
  457.     8101      ZF_Shrub1
  458.     8102      ZF_Shrub2
  459.     8103      Z_Bucket
  460.     8104      ZF_ShroomBoom
  461.  
  462.     8200      k_CastelKey   (was K_GoldKey)
  463.  
  464.     8500      ZM_LgStein
  465.     8501      ZM_SmStein
  466.     8502      ZM_CandleWeb
  467.     8503      ZM_SmCandle
  468.     8504      ZM_LgCandle
  469.     8505      ZM_GobletSpill
  470.     8506      ZM_GobletTall
  471.     8507      ZM_GobletSmall
  472.     8508      ZM_GobletSilver
  473.     8509      ZM_CleaverMeat
  474.  
  475.     9001      X_MapSpot
  476.     9002      ZZ_Skull
  477.     9003      ZZ_BigGem
  478.     9004      ZZ_GemRed
  479.     9005      ZZ_GemGreen1
  480.     9006      ZZ_GemBlue1
  481.     9007      ZZ_Book1
  482.     9008      ZZ_Book2
  483.     9009      ZZ_GemGreen2
  484.     9010      ZZ_GemBlue2
  485.     9011      ZZ_WingedStatueNoSkull
  486.     9012      ZZ_GemPedestal
  487.     9013      X_MapSpotGravity
  488.     9014      ZZ_Skull2
  489.     9015      ZZ_FWeapon
  490.     9016      ZZ_CWeapon
  491.     9017      ZZ_MWeapon
  492.     9018      ZZ_Gear
  493.     9019      ZZ_Gear2
  494.     9020      ZZ_Gear3
  495.     9021      ZZ_Gear4
  496.  
  497.     10000     Spawn_Fog
  498.     10001     Spawn_Fog_a
  499.     10002     Spawn_Fog_b
  500.     10003     Spawn_Fog_c
  501.  
  502.     10011     C_Wraith2
  503.     10030     C_Ettin
  504.     10040     A_Banishment
  505.     10060     C_FireImp
  506.     10080     C_Heresiarch
  507.  
  508.     10090     Spike_Down
  509.     10091     Spike_Up
  510.  
  511.     10100     C_FighterBoss
  512.     10101     C_ClericBoss
  513.     10102     C_MageBoss
  514.     10110     A_Flechette
  515.     10120     A_HealRadius
  516.  
  517.     10200     C_Korax
  518.  
  519.     10225     Spawn_Bat
  520.  
  521.     10500     Z_SmallFlame_Timed
  522.     10501     Z_SmallFlame_Permanent
  523.     10502     Z_LargeFlame_Timed
  524.     10503     Z_LargeFlame_Permanent
  525.  
  526.  
  527. ┌─────┬─────────────────────────────────────────────────────────────────────
  528. │ 5   │ Hexen Script Language
  529. └─────┘
  530.  
  531.   The Hexen Script Language is called the "Action Code Script", or ACS.
  532.  
  533.   Each map has an ACS file that contains the scripts specific to that map.  
  534.   The scripts within it are identified using numbers that the general special
  535.   ACS_Execute() uses.  
  536.   
  537.   A script itself can call the ACS_Execute() special, which will spawn 
  538.   (start) another script that will run concurrently (at the same time) 
  539.   with the rest of the scripts.  
  540.  
  541.   A script can also be declared as OPEN, which will make it run automatically 
  542.   upon entering the map.  This is used for perpetual type effects, level 
  543.   initialization, etc.  
  544.   
  545.   The compiler takes the ACS file and produces and object file that is the 
  546.   last lump in the map WAD (BEHAVIOR).
  547.  
  548.   To create a compiled ACS file from a text script from DOS type:
  549.  
  550.   C:\HEXEN > ACS filename [enter]
  551.  
  552.   (See Note below)
  553.  
  554.   The output of ACS produces 'filename.o' from 'filename.acs'. The contents 
  555.   of this output file (filename.o) can be directly used as the BEHAVIOR 
  556.   lump of the map it's to be used with.
  557.  
  558.  
  559.   SBS Note : DeeP and other editors directly integrate seamless support for 
  560.          the ACS compiler without having to exit to DOS. The new
  561.          behavior Lump can be directly saved with no additional steps
  562.          required. There are 2 examples of scripts. One is SCRIPTS.ACS
  563.          and the other is HEXENTUT.ACS, with corresponding PWAD files.
  564.  
  565.          In DeeP, select "Compile Script" from the F6 HEXEN development 
  566.          menu. 
  567.  
  568.   Script Shared Structure
  569.   -----------------------
  570.  
  571.   Map scripts should start with #include "common.acs", which is just...
  572.  
  573.   #include "specials.acs"
  574.   #include "defs.acs"
  575.   #include "wvars.acs"
  576.  
  577.   The file "specials.acs" defines all the general specials.  These are used
  578.   within scripts just like function calls.  The file "defs.acs" defines a
  579.   bunch of constants that are used by the scripts.  The file "wvars.acs"
  580.   defines all the world variables.  It needs to be included by all maps so
  581.   they use consistent indexing.
  582.  
  583.  
  584.   Variables and their Scope
  585.   -------------------------
  586.  
  587.   There is only one data type ACS, a 4 byte integer.  Use the keyword int to
  588.   declare an integer variable.  You may also use the keyword str, it is
  589.   synonymous with int.  It's used to indicate that you'll be using the
  590.   variable as a string.  The compiler doesn't use string pointers, it uses
  591.   string handles, which are just integers.
  592.  
  593.   Declaring a variable
  594.   --------------------
  595.  
  596.   There are two "types" of variables: 1. "str"
  597.                       2. "int":
  598.  
  599.     examples:
  600.     ---------
  601.  
  602.     str mystring;
  603.     int myint;
  604.  
  605.     or:
  606.  
  607.     str texture, sound;
  608.     int i, tid;
  609.  
  610.   * Note: You can't assign a variable in its declaration; you must give it a
  611.     value in a different expression.
  612.  
  613.   The SCOPE of a variable is one of the following:
  614.  
  615.       1. World-scope
  616.       2. Map-scope, 
  617.       3. Script-scope.
  618.  
  619.   1. World-scope
  620.  
  621.      World-scope variables are global, and can be accessed in any map.
  622.      Hexen maintains [n] permanent globals, numbered 0-[n-1].  You must
  623.      assign one of the globals a name in order to access it, like this:
  624.  
  625.     world int 5:Grunt;
  626.  
  627.      This tells Hexen to reference world global number 5 whenever it
  628.      encounters the name "Grunt".
  629.  
  630.   2. Map-scope
  631.  
  632.      Map-scope variables are local to the current map.  They must be
  633.      declared outside of any script code, but without the world keyword.
  634.      These variables can't be accessed in any other map.
  635.  
  636.      Script-scope variables are local to the current script - they
  637.      can't be accessed by any other script or map.
  638.  
  639.    Here's some code that shows the declaration of all three scopes:
  640.  
  641.       world int 3:DungeonAccess; // World-scope
  642.  
  643.       int mapTimer; // Map-scope
  644.  
  645.       script 4 (void)
  646.       {
  647.       int x, y; // Script-scope
  648.       ...
  649.       }
  650.  
  651.  
  652.   Language Structure
  653.   -------------------
  654.  
  655.   Here is a quick reference manual type definition of the language.  It
  656.   ends with a description of all the internal functions.
  657.  
  658.   Keywords
  659.   --------
  660.  
  661.   The following identifiers are reserved for use as keywords, and may
  662.   not be used otherwise:
  663.  
  664.     break
  665.     case
  666.     const
  667.     continue
  668.     default
  669.     define
  670.     do
  671.  
  672.     else
  673.     goto
  674.     if
  675.     include
  676.     int
  677.  
  678.     open
  679.     print
  680.     printbold
  681.     restart
  682.  
  683.     script
  684.     special
  685.     str
  686.     suspend
  687.     switch
  688.  
  689.     terminate
  690.     until
  691.     void
  692.     while
  693.     world
  694.  
  695.   Comments
  696.   --------
  697.  
  698.   Comments are ignored by the script compiler. There are two forms: 
  699.   
  700.      1. /*...you comment... */   
  701.        All information between the first /* and last */ is ignored. 
  702.        The leading /* and trailing */ are required.
  703.      2. //
  704.        All information past the // is ignored
  705.  
  706.   examples:
  707.  
  708.     /*
  709.        This is a comment.
  710.     */
  711.  
  712.     int a;   // And this is a comment
  713.  
  714.  
  715.  
  716.   World-variable definitions
  717.   ---------------------------
  718.  
  719.   world int <constant-expression> : <identifier> ;
  720.  
  721.   world int <constant-expression> : <identifier> , ... ;
  722.  
  723.  
  724.   Map-variable definitions
  725.   ------------------------
  726.  
  727.   Declares a variable local to the current map.
  728.  
  729.   int <identifier> ;
  730.   str <identifier> ;
  731.   int <identifier> , ... ;
  732.  
  733.  
  734.   Include Directive
  735.   -----------------
  736.  
  737.   Includes the source of the specified file and compiles it. This acts the
  738.   same as if you have "included" the source in the file it resides in. Use
  739.   this to make a common reference set of code you use often.  
  740.  
  741.   #include <string-literal>
  742.  
  743.   The supplied required includes shown earlier are an illustration:
  744.  
  745.      #include "specials.acs"
  746.      #include "defs.acs"
  747.      #include "wvars.acs"
  748.  
  749.   Define Directive
  750.   ----------------
  751.  
  752.   Replaces an identifier with a constant expression.
  753.  
  754.   #define <identifier> <constant-expression>
  755.  
  756.   Whenever "identifier" is used in the source, the "constant-expression"
  757.   is substituted. This is similar to a macro or keyboard short-cut.
  758.  
  759.  
  760.   Constant Expressions
  761.   --------------------
  762.  
  763.   <integer-constant>:
  764.  
  765.   decimal      200
  766.   hexadecimal  0x00a0, 0x00A0
  767.   fixed point  32.0, 0.5, 103.329
  768.  
  769.   any radix    <radix>_digits :
  770.  
  771.      binary        2_01001010
  772.      octal         8_072310
  773.      decimal       10_50025
  774.      hexadecimal   16_00a03f2
  775.  
  776.  
  777.   String Literals
  778.   ---------------
  779.  
  780.   <string-literal>: "string"
  781.  
  782.   Example : "Hello there"
  783.  
  784.  
  785.   Script Definitions
  786.   ------------------
  787.  
  788.   To define a script:
  789.  
  790.   <script-definition>:
  791.   script <constant-expression> ( <arglist> ) { <statement> }
  792.   script <constant-expression> OPEN { <statement> }
  793.  
  794.   For example:
  795.  
  796.   script 10 (void) { ... }
  797.  
  798.   script 5 OPEN { ... }
  799.  
  800.   * Note that OPEN scripts do not take arguments.
  801.  
  802.  
  803.   Statements
  804.   ----------
  805.  
  806.   <statement>:
  807.  
  808.     <declaration-statement>
  809.     <assignment-statement>
  810.     <compound-statement>
  811.     <switch-statement>
  812.     <jump-statement>
  813.     <selection-statement>
  814.     <iteration-statement>
  815.     <function-statement>
  816.     <linespecial-statement>
  817.     <print-statement>
  818.     <control-statement>
  819.  
  820.  
  821.   Declaration Statements
  822.   ----------------------
  823.  
  824.   Declaration statements create script variables.
  825.  
  826.   <declaration-statement>:
  827.     int <variable> ;
  828.     int <variable> , <variable> , ... ;
  829.  
  830.  
  831.   Assignment Statements
  832.   ---------------------
  833.  
  834.   Assigns an expression to a variable.
  835.  
  836.   <assignment-statement>:
  837.     <variable> <assignment-operator> <expression> ;
  838.  
  839.   <assignment-operator>:
  840.      =
  841.     +=
  842.     -=
  843.     *=
  844.     /=
  845.     %=
  846.  
  847.   * Note: An assignment of the form V <op>= E is equivalent to V = V <op> E.
  848.     For example:
  849.  
  850.     A += 5;     is the same as
  851.     A = A + 5;
  852.  
  853.   Compound Statements
  854.   -------------------
  855.  
  856.   <compound-statement>:
  857.     { <statement-list> }
  858.  
  859.   <statement-list>:
  860.     <statement> <statement> <...>
  861.  
  862.  
  863.   Switch Statements
  864.   -----------------
  865.  
  866.   A switch statement evaluates an integral expression and passes control 
  867.   to the code following the matched case.
  868.  
  869.   <switch-statement>:
  870.  
  871.     switch ( <expression> ) { <labeled-statement-list> }
  872.  
  873.    <labeled-statement>:
  874.  
  875.      case <constant-expression> : <statement>
  876.      default : <statement>
  877.  
  878.   Example:
  879.  
  880.     switch (a)
  881.     {
  882.       case 1:       // when a == 1
  883.     b = 1;      // .. this is executed,
  884.     break;      // and this breaks out of the switch().
  885.       case 2:       // when a == 2
  886.     b = 8;      // .. this is executed,
  887.             // but there is no break, so it continues to the next
  888.             // case, even though a != 3.
  889.       case 3:       // when a == 3
  890.     b = 666;    // .. this is executed,
  891.     break;      // and this breaks out of the switch().
  892.       default:      // when none of the other cases match,
  893.     b = 777;    // .. this is executed.
  894.     }
  895.  
  896.    Note for C users: 
  897.  
  898.     While C only allows integral expressions in a switch
  899.     statement, ACS allows full expressions such as "a + 10".
  900.  
  901.  
  902.   Jump Statements
  903.   ---------------
  904.  
  905.   A jump statement passes control to another portion of the script.
  906.  
  907.   <jump-statement>:
  908.  
  909.     continue ;
  910.     break ;
  911.     restart ;
  912.  
  913.  
  914.   Iteration Statements
  915.   --------------------
  916.  
  917.   <iteration-statement>:
  918.  
  919.     while ( <expression> ) <statement>
  920.     until ( <expression> ) <statement>
  921.     do <statement> while ( <expression> ) ;
  922.     do <statement> until ( <expression> ) ;
  923.     for ( <assignment-statement> ; <expression> ; <assignment-statement> )
  924.       <statement>
  925.  
  926.    The continue, break and restart keywords can be used in an iteration
  927.    statement:
  928.  
  929.     - the continue keyword jumps to the end of the last <statement> in the
  930.       iteration-statement.  The loop continues.
  931.  
  932.     - the break keyword jumps right out of the iteration-statement.
  933.  
  934.  
  935.   Function Statements
  936.   --------------------
  937.  
  938.   A function statement calls a Hexen internal-function, or a Hexen
  939.   linespecial-function.
  940.  
  941.   <function-statement>:
  942.  
  943.     <internal-function> | <linespecial-statement>
  944.  
  945.   <internal-function>:
  946.  
  947.     <identifier> ( <expression> , ... ) ;
  948.     <identifier> ( const : <constant-expression> , ... ) ;
  949.  
  950.   <linespecial-statement>:
  951.  
  952.     <linespecial> ( <expression> , ... ) ;
  953.     <linespecial> ( const : <constant-expression> , ... ) ;
  954.  
  955.  
  956.   Print Statements
  957.   ----------------
  958.  
  959.   <print-statement>:
  960.  
  961.     print ( <print-type> : <expression> , ... ) ;
  962.     printbold ( <print-type> : <expression> , ... ) ;
  963.  
  964.     <print-type>:
  965.  
  966.       s   string
  967.       d   decimal
  968.       c   constant
  969.  
  970.  
  971.   Note : Some combinations of text cause playing errors. The text appear 
  972.      to be hard coded in the .EXE. If you have a strange error and 
  973.      have a "print" statement, remove the statement and see if the error
  974.      still occurs. If it now works, change your text.
  975.     
  976.  
  977.   Selection Statements
  978.   --------------------
  979.  
  980.   <selection-statement>:
  981.  
  982.     if ( <expression> ) <statement>
  983.     if ( <expression> ) <statement> else <statement>
  984.  
  985.  
  986.   Control Statements
  987.   ------------------
  988.  
  989.   <control-statement>:
  990.  
  991.     suspend ;         // suspends the script
  992.     terminate ;       // terminates the script
  993.  
  994.  
  995.   Internal Functions
  996.   -------------------
  997.  
  998.    void tagwait(int tag);
  999.    ----------------------
  1000.  
  1001.    The current script is suspended until all sectors marked with
  1002.    <tag> are inactive.
  1003.  
  1004.  
  1005.    void polywait(int po);
  1006.    ----------------------
  1007.  
  1008.    The current script is suspended until the polyobj marked with
  1009.    <po> is incactive.
  1010.  
  1011.  
  1012.    void scriptwait(int script);
  1013.    ----------------------------
  1014.  
  1015.    The current script is suspended until the script specified by
  1016.    <script> has terminated.
  1017.  
  1018.  
  1019.    void delay(int ticks);
  1020.    ----------------------
  1021.  
  1022.    The current script is suspended for a time specified by <ticks>.
  1023.    A tick represents one cycle from a 35Hz timer.
  1024.  
  1025.  
  1026.    void changefloor(int tag, str flatname);
  1027.    ----------------------------------------
  1028.  
  1029.    The floor flat for all sectors marked with <tag> is changed to
  1030.    <flatname>.
  1031.  
  1032.  
  1033.    void changeceiling(int tag, str flatname);
  1034.    ------------------------------------------
  1035.  
  1036.     The ceiling flat for all sectors marked with <tag> is changed to
  1037.     <flatname>.
  1038.  
  1039.  
  1040.    int random(int low, int high);
  1041.    ------------------------------
  1042.  
  1043.    Returns a random number between <low> and <high>, inclusive.  The
  1044.    values for <low> and <high> range from 0 to 255.
  1045.  
  1046.  
  1047.    int lineside(void);
  1048.    -------------------
  1049.  
  1050.    Returns the side of the line the script was activated from.  Use
  1051.    the macros LINE_FRONT and LINE_BACK, defined in "defs.acs".
  1052.  
  1053.  
  1054.    void clearlinespecial(void);
  1055.    ----------------------------
  1056.  
  1057.    The special of the line that activated the script is cleared.
  1058.  
  1059.  
  1060.    int playercount(void);
  1061.    ----------------------
  1062.  
  1063.    Returns the number of active players.
  1064.  
  1065.  
  1066.    int gametype(void);
  1067.    -------------------
  1068.    
  1069.    Returns the type of game being played:
  1070.  
  1071.      GAME_SINGLE_PLAYER
  1072.      GAME_NET_COOPERATIVE
  1073.      GAME_NET_DEATHMATCH
  1074.  
  1075.  
  1076.    int gameskill(void);
  1077.    --------------------
  1078.  
  1079.    Returns the skill of the game being played:
  1080.  
  1081.      SKILL_VERY_EASY
  1082.      SKILL_EASY
  1083.      SKILL_NORMAL
  1084.      SKILL_HARD
  1085.      SKILL_VERY_HARD
  1086.  
  1087.    Example:
  1088.  
  1089.      int a;
  1090.      a = gameskill();
  1091.  
  1092.      switch( gameskill() )
  1093.      {
  1094.        case SKILL_VERY_EASY:
  1095.        ...
  1096.        case SKILL_VERY_HARD:
  1097.        ...
  1098.      }
  1099.  
  1100.  
  1101.    int timer(void);
  1102.    ----------------
  1103.  
  1104.    Returns the current leveltime in ticks.
  1105.  
  1106.  
  1107.    void sectorsound(str name, int volume);
  1108.    ---------------------------------------
  1109.  
  1110.    Plays a sound in the sector the line is facing.  <volume> has the
  1111.    range 0 to 127.
  1112.  
  1113.  
  1114.    void thingsound(int tid, str name, int volume);
  1115.    -----------------------------------------------
  1116.  
  1117.    Plays a sound at all things marked with <tid>.  <volume> has the
  1118.    range 0 to 127.  See section 15 for values.
  1119.  
  1120.  
  1121.    void ambientsound(str name, int volume);
  1122.    ----------------------------------------
  1123.  
  1124.    Plays a sound that all players hear at the same volume.  <volume> has
  1125.    the range 0 to 127.  See section 15 for values. 
  1126.  
  1127.  
  1128.    void soundsequence(str name);
  1129.    -----------------------------
  1130.  
  1131.    Plays a sound sequence in the sector the line is facing.
  1132.  
  1133.  
  1134.    int thingcount(int type, int tid);
  1135.    ----------------------------------
  1136.  
  1137.    Returns a count of things in the world.  Use the thing type definitions
  1138.    in defs.acs for <type>.  Both <type> and <tid> can be 0 to force the
  1139.    counting to ignore that information.
  1140.  
  1141.    Examples:
  1142.  
  1143.    // Count all ettins that are marked with TID 28:
  1144.  
  1145.    c = thingcount(T_ETTIN, 28);
  1146.  
  1147.    // Count all ettins, no matter what their TID is:
  1148.  
  1149.    c = thingcount(T_ETTIN, 0);
  1150.  
  1151.    // Count all things with TID 28, no matter what their type is:
  1152.  
  1153.    c = thingcount(0, 28);
  1154.  
  1155.  
  1156.    void setlinetexture(int line, int side, int position, str texturename);
  1157.    -----------------------------------------------------------------------
  1158.  
  1159.    Sets a texture on all lines identified by <line>.  A line is identified by
  1160.    giving it the special Line_SetIdentification in a map editor.
  1161.  
  1162.    <side>:
  1163.  
  1164.      SIDE_FRONT
  1165.      SIDE_BACK
  1166.  
  1167.    <position>:
  1168.  
  1169.      TEXTURE_TOP
  1170.      TEXTURE_MIDDLE
  1171.      TEXTURE_BOTTOM
  1172.  
  1173.    Examples:
  1174.  
  1175.    setlinetexture(14, SIDE_FRONT, TEXTURE_MIDDLE, "ice01");
  1176.    setlinetexture(3, SIDE_BACK, TEXTURE_TOP, "forest03");
  1177.  
  1178.  
  1179.    void setlineblocking(int line, int blocking);
  1180.    ---------------------------------------------
  1181.  
  1182.    Sets the blocking (impassable) flag on all lines identified by <line>.
  1183.  
  1184.    <blocking>:
  1185.  
  1186.      ON
  1187.      OFF
  1188.  
  1189.    Example:
  1190.  
  1191.    setlineblocking(22, OFF);
  1192.  
  1193.  
  1194.    void setlinespecial(int line, int special, int arg1, int arg2,
  1195.                int arg3, int arg4, int arg5);
  1196.    _______________________________________________________________
  1197.  
  1198.    Sets the line special and args on all lines identified by <line>.
  1199.  
  1200.  
  1201. ┌─────┬─────────────────────────────────────────────────────────────────────
  1202. │ 6   │ Flats with special properties
  1203. └─────┘
  1204.  
  1205.     Lava            Lava does damage
  1206.     Water           Makes things sink
  1207.     Sludge          Makes things sink
  1208.     Ice             Changes friction
  1209.  
  1210.  
  1211. ┌─────┬─────────────────────────────────────────────────────────────────────
  1212. │ 7   │ The MAPINFO lump
  1213. └─────┘
  1214.  
  1215.     This is a lump in the .WAD that gives attributes to each map.  This entry
  1216.     does not go with each map - there is only one MAPINFO lump in the entire
  1217.     IWAD.  If you include a MAPINFO lump in a PWAD, make sure it's got
  1218.     information for all the possible maps the player will be entering.
  1219.  
  1220.     map:        Number and name of map [1..60]
  1221.     warptrans:  Actual map number in case maps are not sequential [1..60]
  1222.     next:       Map to teleport to upon exit of timed deathmatch [1..60]
  1223.     cdtrack:    CD track to play during level
  1224.     cluster:    Defines what cluster level belongs to
  1225.     sky1:       Default sky texture; followed by speed
  1226.     sky2:       Alternate sky displayed in Sky2 sectors ; followed by speed
  1227.     doublesky:  parallax sky: sky2 behind sky1
  1228.     lightning:  Keyword indicating use of lightning on the level
  1229.         flashes from sky1 to sky2 (see also: IndoorLightning special)
  1230.     fadetable:  Lump Name of fade table {fogmap}
  1231.  
  1232.     Example MapInfo entry:
  1233.  
  1234.         map 1 "Winnowing Hall"
  1235.         warptrans 1
  1236.         next 2
  1237.         cluster 1
  1238.         sky1 SKY2 2             ; 2 is the sky scroll speed
  1239.         sky2 SKY3 0             ; 0 means don't scroll sky
  1240.         lightning
  1241.         doublesky
  1242.         cdtrack 13
  1243.  
  1244.  
  1245.   Note on "next" integer (for timed deathmatches):
  1246.  
  1247.   In normal gameplay, there is no linear fashion in which the game
  1248.   progresses from one level to another; you just go through a teleport
  1249.   somewhere on a level, and it takes you to somewhere on another
  1250.   level.  
  1251.   
  1252.   For -timer deathmatch, the game needs to know what level to
  1253.   proceed to because it isn't always just the next higher level.
  1254.  
  1255.   A note about the WARPTRANS keyword:  Maps are edited and named
  1256.   MAPxx, where xx is a number from 01 to 63.  This is the number that
  1257.   is used from within scripts when a map is referred to, and by the
  1258.   MAP keyword in the MAPINFO lump.  
  1259.   
  1260.   However, the -warp option and the warping cheat use a different set 
  1261.   of numbers.  This different set of numbers is set by the WARPTRANS keyword.  
  1262.   By default, the WARPTRANS value is set to the same number as the map.  
  1263.  
  1264.   Our designers starting making maps with numbers that had big gaps between 
  1265.   them, and then made the scripts refer to these numbers, so we needed a 
  1266.   way to pack all the map numbers into a continuous stream for the -warp 
  1267.   option. Also, the accepted range for a WARPTRANS value is 1-31.  Makes it
  1268.   easy when using DM.
  1269.  
  1270.  
  1271.   Note on "cluster" integer:
  1272.   -------------------------
  1273.  
  1274.   The game maps are divided into clusters.  When you enter a new cluster, 
  1275.   you can never again visit any of the levels from the previous cluster.  
  1276.   This makes it so each individual save game only needs to backup map 
  1277.   archives for about 6-7 maps, and provides for a milestone marker of 
  1278.   sorts for game play, like an episode .
  1279.   
  1280.   A Hexen backdrop and some text are given at the end of each cluster.  
  1281.   If you don't enter a cluster, it defaults to 0.  The commercial IWAD 
  1282.   separates its 31 maps into 5 clusters.
  1283.  
  1284.  
  1285. ┌─────┬─────────────────────────────────────────────────────────────────────
  1286. │ 8   │ PolyObjects
  1287. └─────┘
  1288.  
  1289.   Polyobjs are one-sided lines that are built somewhere else on the map, and
  1290.   then later translated to the desired start spot on the map at level load.
  1291.  
  1292.   In building polyobjs, two different line specials can be used to determine
  1293.   the line drawing order:
  1294.  
  1295.     Polyobj_ExplicitLine(polyNumber, orderNumber, polyMirror, sound);
  1296.  
  1297.     Polyobj_StartLine   (polyNumber, polyMirror, sound);
  1298.  
  1299.   Each polyobj should have a unique polyNumber, which is used in poly line
  1300.   specials to refer to a particular polyobj.
  1301.  
  1302.   polyMirror refers to a second polyobj that will "mirror" all actions of the
  1303.   first polyobj.  For instance, if a polyobj is rotated to the right by 90
  1304.   degrees, then that polyobj's mirror will rotate left 90 degrees.  
  1305.   
  1306.   Note that having two polyobjs mirror each other is not considered to be a 
  1307.   good thing, but in general won't cause problems because a poly can only 
  1308.   do one particular action at a time.  
  1309.   
  1310.   Meaning:  if that poly that rotated left by 90 degrees then mirrored the 
  1311.   right-turning polyobj, the right-turning poly would ignore any attempt 
  1312.   to rotate it again, as it would already be being acted upon.
  1313.  
  1314.   The last parameter to these specials refers to a particular sound type
  1315.   that should play when the poly is moved/rotated.  See the section on
  1316.   attaching sounds to a moving sector for more info.
  1317.  
  1318.  
  1319.   Polyobj_StartLine():
  1320.   --------------------
  1321.  
  1322.   A very basic special.  Place it on a particular polyobj line, and that line
  1323.   will be the first line rendered on the polyobj.  
  1324.   
  1325.   The rendering order for all other lines are determined by iterating through 
  1326.   to the next line that has a first point identical to the start line's second 
  1327.   point.  The third line rendered will be the next line that has a first point 
  1328.   identical to the second line's second point, and so on and so forth.  
  1329.   
  1330.   This method works well for polyobjs that are convex, and has the advantage 
  1331.   of leaving all but one line free for other line specials.
  1332.  
  1333.   Polyobj_ExplicitLine:
  1334.   ---------------------
  1335.  
  1336.   This special requires a bit more work to use.  Each line in the polyobj
  1337.   defined using this special must use this line special.  Then, a value from
  1338.   1-255 should be placed in orderNumber.  
  1339.   
  1340.   This defines the rendering order for the lines, with a 1 being the first 
  1341.   line rendered, and so on.  Useful for non-convex polyobjs, but has the 
  1342.   disadvantage of utilizing all line specials on the poly.
  1343.  
  1344.  
  1345.   Polyobj Start Spots and Anchor Points
  1346.   -------------------------------------
  1347.  
  1348.   Each polyobj must have an anchor point, and a startSpot.  The anchor is a
  1349.   thing placed near the polyobj when it's created that defines the origin of
  1350.   the polyobj, or the point in which it will rotate about.  The anchor (and 
  1351.   all polyobj lines) are directly translated to the polyobj startSpot.
  1352.  
  1353.   Bottom line:  The anchor point is the point near the polyobj, and the
  1354.   startSpot is the point on the actual map that defines the location of the
  1355.   poly.
  1356.  
  1357.   There are two different types of startSpots:  crushing and non-crushing.
  1358.   Pretty obvious what the difference is:)  
  1359.   
  1360.   If the poly strikes an object, it'll first attempt to move it.  If that 
  1361.   fails, it will either try to damage the object, or just stop moving 
  1362.   depending upon the type of startSpot.
  1363.  
  1364.   Please note that the ANGLE field of the startSpot and anchor points should 
  1365.   be equal to the polyNumber that was previously defined for that particular
  1366.   polyobj.  The polyobj stuff was done before any of the TID/thing special 
  1367.   code was implemented, so Raven did this temporary hack, which turned 
  1368.   permanent, as the designers had already done a ton of polyobjs, and didn't 
  1369.   want to have to go back and replace them.
  1370.  
  1371.  
  1372. ┌───┬─────────────────────────────────────────────────────────────────────
  1373. │ 9 │ List of Spawnable Objects
  1374. └───┘
  1375.  
  1376.     Use these identifiers for the Thing_Spawn() and Thing_SpawnNoFog()
  1377.     specials:
  1378.  
  1379.     T_NONE
  1380.     T_CENTAUR
  1381.     T_CENTAURLEADER
  1382.     T_DEMON
  1383.     T_ETTIN
  1384.     T_FIREGARGOYLE
  1385.     T_WATERLURKER
  1386.     T_WATERLURKERLEADER
  1387.     T_WRAITH
  1388.     T_WRAITHBURIED
  1389.  
  1390.     T_FIREBALL1
  1391.     T_MANA1
  1392.     T_MANA2
  1393.     T_ITEMBOOTS
  1394.     T_ITEMEGG
  1395.     T_ITEMFLIGHT
  1396.     T_ITEMSUMMON
  1397.     T_ITEMTPORTOTHER
  1398.     T_ITEMTELEPORT
  1399.     T_BISHOP
  1400.     T_ICEGOLEM
  1401.     T_BRIDGE
  1402.     T_DRAGONSKINBRACERS
  1403.  
  1404.     T_ITEMHEALTHPOTION
  1405.     T_ITEMHEALTHFLASK
  1406.     T_ITEMHEALTHFULL
  1407.     T_ITEMBOOSTMANA
  1408.     T_FIGHTERAXE
  1409.     T_FIGHTERHAMMER
  1410.     T_FIGHTERSWORD1
  1411.     T_FIGHTERSWORD2
  1412.     T_FIGHTERSWORD3
  1413.     T_CLERICSTAFF
  1414.     T_CLERICHOLY1
  1415.     T_CLERICHOLY2
  1416.     T_CLERICHOLY3
  1417.     T_MAGESHARDS
  1418.     T_MAGESTAFF1
  1419.     T_MAGESTAFF2
  1420.     T_MAGESTAFF3
  1421.     T_MORPHBLAST
  1422.  
  1423.     T_ROCK1
  1424.     T_ROCK2
  1425.     T_ROCK3
  1426.     T_DIRT1
  1427.     T_DIRT2
  1428.     T_DIRT3
  1429.     T_DIRT4
  1430.     T_DIRT5
  1431.     T_DIRT6
  1432.  
  1433.     T_ARROW
  1434.     T_DART
  1435.     T_POISONDART
  1436.     T_RIPPERBALL
  1437.     T_STAINEDGLASS1
  1438.     T_STAINEDGLASS2
  1439.     T_STAINEDGLASS3
  1440.     T_STAINEDGLASS4
  1441.     T_STAINEDGLASS5
  1442.     T_STAINEDGLASS6
  1443.     T_STAINEDGLASS7
  1444.     T_STAINEDGLASS8
  1445.     T_STAINEDGLASS9
  1446.     T_STAINEDGLASS0
  1447.     T_BLADE
  1448.     T_ICESHARD
  1449.     T_FLAME_SMALL
  1450.     T_FLAME_LARGE
  1451.  
  1452.     T_MESHARMOR
  1453.     T_FALCONSHIELD
  1454.     T_PLATINUMHELM
  1455.     T_AMULETOFWARDING
  1456.     T_ITEMFLECHETTE
  1457.     T_ITEMTORCH
  1458.     T_ITEMREPULSION
  1459.     T_MANA3
  1460.     T_PUZZSKULL
  1461.     T_PUZZGEMBIG
  1462.     T_PUZZGEMRED
  1463.     T_PUZZGEMGREEN1
  1464.     T_PUZZGEMGREEN2
  1465.     T_PUZZGEMBLUE1
  1466.     T_PUZZGEMBLUE2
  1467.     T_PUZZBOOK1
  1468.     T_PUZZBOOK2
  1469.  
  1470.     T_METALKEY
  1471.     T_SMALLMETALKEY
  1472.     T_AXEKEY
  1473.     T_FIREKEY
  1474.     T_GREENKEY
  1475.     T_MACEKEY
  1476.     T_SILVERKEY
  1477.     T_RUSTYKEY
  1478.     T_HORNKEY
  1479.     T_SERPENTKEY
  1480.  
  1481.     T_WATERDRIP
  1482.     T_TEMPSMALLFLAME
  1483.     T_PERMSMALLFLAME
  1484.     T_TEMPLARGEFLAME
  1485.     T_PERMLARGEFLAME
  1486.     T_DEMON_MASH
  1487.     T_DEMON2_MASH
  1488.     T_ETTIN_MASH
  1489.     T_CENTAUR_MASH
  1490.     T_THRUSTSPIKEUP
  1491.     T_THRUSTSPIKEDOWN
  1492.     T_FLESH_DRIP1
  1493.     T_FLESH_DRIP2
  1494.     T_SPARK_DRIP
  1495.  
  1496.  
  1497. ┌───┬─────────────────────────────────────────────────────────────────────
  1498. │ 10│ List of Activateable/Deactivateable Objects
  1499. └───┘
  1500.  
  1501.       Activatable:
  1502.  
  1503.     MT_ZTWINEDTORCH             Lights torch
  1504.     MT_ZTWINEDTORCH_UNLIT       Lights torch
  1505.     MT_ZWALLTORCH               Lights torch
  1506.     MT_ZWALLTORCH_UNLIT         Lights torch
  1507.     MT_ZGEMPEDESTAL             Makes gem appear
  1508.     MT_ZWINGEDSTATUENOSKULL     Makes skull appear in hands
  1509.     MT_THRUSTFLOOR_UP           Raises thrust spike (if lowered)
  1510.     MT_THRUSTFLOOR_DOWN         Raises thrust spike
  1511.     MT_ZFIREBULL                Lights flames
  1512.     MT_ZFIREBULL_UNLIT          Lights flames
  1513.     MT_ZBELL                    Rings bell
  1514.     MT_ZCAULDRON                Lights flames
  1515.     MT_ZCAULDRON_UNLIT          Lights flames
  1516.     MT_FLAME_SMALL              Ignites flame
  1517.     MT_FLAME_LARGE              Ignites flame
  1518.     MT_BAT_SPAWNER              Start bat spawning
  1519.  
  1520.     Deactivatable:
  1521.     MT_ZTWINEDTORCH             Extinguish torch
  1522.     MT_ZTWINEDTORCH_UNLIT       Extinguish torch
  1523.     MT_ZWALLTORCH               Extinguish torch
  1524.     MT_ZWALLTORCH_UNLIT         Extinguish torch
  1525.     MT_THRUSTFLOOR_UP           Lower thrust spike
  1526.     MT_THRUSTFLOOR_DOWN         Lower thrust spike
  1527.     MT_ZFIREBULL                Extinguish torch
  1528.     MT_ZFIREBULL_UNLIT          Extinguish torch
  1529.     MT_ZCAULDRON                Extinguish torch
  1530.     MT_ZCAULDRON_UNLIT          Extinguish torch
  1531.     MT_FLAME_SMALL              Extinguish torch
  1532.     MT_FLAME_LARGE              Extinguish torch
  1533.     MT_BAT_SPAWNER              Stop bat spawning
  1534.  
  1535.  
  1536. ┌───┬─────────────────────────────────────────────────────────────────────
  1537. │11 │ List of THINGS that require arguments
  1538. └───┘
  1539.  
  1540.     These THINGS ignore their special types, and use the arg0..arg5 fields
  1541.     for their own purposes:
  1542.  
  1543.         Type: 10225             Bat Spawner
  1544.               arg0:   frequency of spawn (1=fastest, 10=slowest)
  1545.               arg1:   spread angle (0..255)
  1546.               arg2:   unused
  1547.               arg3:   duration of bats (in octics)
  1548.               arg4:   turn amount per move (in degrees [0..255])
  1549.  
  1550.         Type: 10000             Fog Spawner
  1551.               arg0:   movement speed [0..10] (10 == fastest)
  1552.               arg1:   spread angle [0..128] (128 == 180 degrees)
  1553.               arg2:   Frequency of spawn [1..10] (1 == fastest)
  1554.               arg3:   Fog Lifetime [0..255] (5 == 1 second)
  1555.               arg4:   unused
  1556.  
  1557.         Type: 10001             Fog Patch Small
  1558.               arg0:   movement speed [0..10] (10 == fastest)
  1559.               arg1:   unused
  1560.               arg2:   unused
  1561.               arg3:   Fog Lifetime [0..255] (5 == 1 second)
  1562.               arg4:   Boolean: (0 == not moving)
  1563.  
  1564.         Type: 10002             Fog Patch Medium
  1565.               arg0:   movement speed [0..10] (10 == fastest)
  1566.               arg1:   unused
  1567.               arg2:   unused
  1568.               arg3:   Fog Lifetime [0..255] (5 == 1 second)
  1569.               arg4:   Boolean: (0 == not moving)
  1570.  
  1571.         Type: 10003             Fog Patch Large
  1572.               arg0:   movement speed [0..10] (10 == fastest)
  1573.               arg1:   unused
  1574.               arg2:   unused
  1575.               arg3:   Fog Lifetime [0..255] (5 == 1 second)
  1576.               arg4:   Boolean: (0 == not moving)
  1577.  
  1578.         Type: 254               Death Wyvern
  1579.               arg0:   TID of possible destination (required)
  1580.               arg1:   TID of possible destination (optional)
  1581.               arg2:   TID of possible destination (optional)
  1582.               arg3:   TID of possible destination (optional)
  1583.               arg4:   TID of possible destination (optional)
  1584.  
  1585.  
  1586.         The Death Wyvern requires mapspots placed around the map with
  1587.         its args containing TIDs of possible destinations, making up to 5
  1588.         destinations possible from each position.  The choice of next
  1589.         destination is random.  Note that the dragon lich's first
  1590.         destination is the first thing that it can locate that has a TID
  1591.         identical to it's own.
  1592.  
  1593.         Type: 10200   Korax
  1594.           TIDs:
  1595.           245     Korax's mapthing
  1596.           249     Teleport destination (MapSpots)
  1597.         Scripts:
  1598.           249     Run when korax health falls below half
  1599.           250-254 Randomly run by korax as commands
  1600.           255     Run upon death of korax
  1601.  
  1602.  
  1603. ┌───┬─────────────────────────────────────────────────────────────────────
  1604. │12 │ Sector Specials
  1605. └───┘
  1606.  
  1607.     The following numbers are used in the sector.type field (type of
  1608.     sector):
  1609.  
  1610.     1   Light_Phased
  1611.     2   LightSequenceStart
  1612.     3   LightSequenceSpecial1
  1613.     4   LightSequenceSpecial2
  1614.  
  1615.     These specials deal with phased lightning ("moving lights").  Two
  1616.     different ways to go about doing phased lighting:  automatic, or
  1617.     by-hand.  
  1618.     
  1619.     The automatic method is (obviously) more convenient, but
  1620.     the by-hand method is more flexible.  Light_Phased is the by-hand
  1621.     special.  Place it on a sector, then set the sector's lightlevel to a
  1622.     phase index (0-63).  As you place the special on nearby sectors,
  1623.     increment the index for each sector.
  1624.  
  1625.     Or, to use the LightSequence specials, just place the LightSequence
  1626.     special on a sector.  Then, for each additional sector, alternate
  1627.     between LightSequenceSpecial1 & LightSequenceSpecial2.
  1628.  
  1629.     For instance, if you wanted phased lightning to flow up a staircase,
  1630.     you could either place Light_Phased on each step, and change the
  1631.     phase index (lightlevel) accordingly.  Or, you could place
  1632.     LightSequenceStart on the bottom step (and set that step's lightlevel
  1633.     to something mid-ranged:  80-128 are pretty nice values), and then
  1634.     let the game calculate the phase indices for each step by placing the
  1635.     LightSequenceSpecial specials on all other steps.  
  1636.     
  1637.     Note that for the LightSequenceSpecial specials to have proper 
  1638.     lighting, set their lightlevels to zero, which causes it to use 
  1639.     the previous sector's lightlevel.  Hence, that "nice value" which 
  1640.     was placed on the first step will iterate through all the other 
  1641.     steps.  If a step's lightlevel is not zero, then that value will 
  1642.     filter down to all other steps after it.
  1643.  
  1644.     26      Stairs_Special1
  1645.     27      Stairs_Special2
  1646.  
  1647.     Used by action specials that build stairs.
  1648.  
  1649.     199     Light_IndoorLightning1
  1650.  
  1651.     Dimmer effect during lightning flash.  Used for indoor areas, which
  1652.     are normally not affected by lightning.
  1653.  
  1654.     198 Light_IndoorLightning2
  1655.  
  1656.         Same as 1, but brighter.
  1657.  
  1658.     200     Sky2
  1659.     Use the alternate sky specified in the mapinfo lump.
  1660.  
  1661.     201     Scroll_North_Slow
  1662.     202     Scroll_North_Medium
  1663.     203     Scroll_North_Fast
  1664.     204     Scroll_East_Slow
  1665.     205     Scroll_East_Medium
  1666.     206     Scroll_East_Fast
  1667.     207     Scroll_South_Slow
  1668.     208     Scroll_South_Medium
  1669.     209     Scroll_South_Fast
  1670.     210     Scroll_West_Slow
  1671.     211     Scroll_West_Medium
  1672.     212     Scroll_West_Fast
  1673.     213     Scroll_NorthWest_Slow
  1674.     214     Scroll_NorthWest_Medium
  1675.     215     Scroll_NorthWest_Fast
  1676.     216     Scroll_NorthEast_Slow
  1677.     217     Scroll_NorthEast_Medium
  1678.     218     Scroll_NorthEast_Fast
  1679.     219     Scroll_SouthEast_Slow
  1680.     220     Scroll_SouthEast_Medium
  1681.     221     Scroll_SouthEast_Fast
  1682.     222     Scroll_SouthWest_Slow
  1683.     223     Scroll_SouthWest_Medium
  1684.     224     Scroll_SouthWest_Fast
  1685.  
  1686.     These all scroll floor flats in their respective directions.  They
  1687.     also move any objects in that direction.
  1688.  
  1689.  
  1690. ┌───┬─────────────────────────────────────────────────────────────────────
  1691. │13 │ Action Specials
  1692. └───┘
  1693.  
  1694.     These are the specials found in the THING.special and LINEDEF.special
  1695.     fields.
  1696.  
  1697.  
  1698.     Floor and Ceiling Specials
  1699.     --------------------------
  1700.  
  1701.     20:Floor_LowerByValue / tag / speed / height / arg4 / arg5
  1702.  
  1703.         tag:            tag of affected sector
  1704.         speed:          speed of move [0..255]
  1705.         height:         relative height of move in pixels
  1706.  
  1707.         Moves the floor of all sectors identified by 'tag'.
  1708.  
  1709.     21:Floor_LowerToLowest / tag / speed / arg3 / arg4 / arg5
  1710.  
  1711.         tag:            tag of affected sector
  1712.         speed:          speed of move [0..255]
  1713.  
  1714.         Lowers floor to lowest adjacent sectors' floor.
  1715.  
  1716.     22:Floor_LowerToNearest / tag / speed / arg3 / arg4 / arg5
  1717.  
  1718.         tag:            tag of affected sector
  1719.         speed:          speed of move [0..255]
  1720.  
  1721.         Lowers floor to next lower adjacent sector's floor.
  1722.  
  1723.     23:Floor_RaiseByValue / tag / speed / height / arg4 / arg5
  1724.  
  1725.         tag:            tag of affected sector
  1726.         speed:          speed of move [0..255]
  1727.         height:         relative height of move in pixels
  1728.  
  1729.         Moves the floor of all sectors identified by 'tag'.
  1730.  
  1731.     24:Floor_RaiseToHighest / tag / speed / arg3 / arg4 / arg5
  1732.  
  1733.         tag:            tag of affected sector
  1734.         speed:          speed of move [0..255]
  1735.  
  1736.         Raises floor to highest adjacent sectors' floor.
  1737.  
  1738.     25:Floor_RaiseToNearest / tag / speed / arg3 / arg4 / arg5
  1739.  
  1740.         tag:            tag of affected sector
  1741.         speed:          speed of move [0..255]
  1742.  
  1743.         Raises floor to next higher adjacent sector's floor.
  1744.  
  1745.     28:Floor_RaiseAndCrush / tag / speed / crush / arg4 / arg5
  1746.  
  1747.         tag:            tag of affected sector
  1748.         speed:          speed of move [0..255]
  1749.         crush:          damage done by crush
  1750.  
  1751.         Raises floor to ceiling and does crushing damage.
  1752.  
  1753.     35:Floor_RaiseByValueTimes8 / tag / speed / height / arg4 / arg5
  1754.  
  1755.         tag:            tag of affected sector
  1756.         speed:          speed of move [0..255]
  1757.         height:         relative height of move in 8 pixel units
  1758.  
  1759.         Raises the floor in increments of 8 units.
  1760.  
  1761.     36:Floor_LowerByValueTimes8 / tag / speed / height / arg4 / arg5
  1762.  
  1763.         tag:            tag of affected sector
  1764.         speed:          speed of move [0..255]
  1765.         height:         relative height of move in 8 pixel units
  1766.  
  1767.         Lowers the floor in increments of 8 units.
  1768.  
  1769.     46:Floor_CrushStop / tag / arg2 / arg3 / arg4 / arg5
  1770.  
  1771.         tag:            tag of affected sector
  1772.  
  1773.         Turns off a crushing floor.
  1774.  
  1775.     66:Floor_LowerInstant / tag / arg2 / height / arg4 / arg5
  1776.  
  1777.         tag:            tag of affected sector
  1778.         height:         relative height in units of 8 pixels
  1779.  
  1780.         Moves the floor down instantly by a specified amount.
  1781.  
  1782.     67:Floor_RaiseInstant / tag / arg2 / height / arg4 / arg5
  1783.  
  1784.         tag:            tag of affected sector
  1785.         height:         relative height in units of 8 pixels
  1786.  
  1787.         Moves the floor up instantly by a specified amount.
  1788.  
  1789.     68:Floor_MoveToValueTimes8 / tag / speed / height / negative / arg5
  1790.  
  1791.         tag:            tag of affected sector
  1792.         speed:          speed of move
  1793.         height:         absolute value in 8 pixel units of destination height
  1794.         negative:       boolean (true if height is negative)
  1795.  
  1796.         Move floor to an absolute height.
  1797.  
  1798.     40:Ceiling_LowerByValue / tag / speed / height / arg4 / arg5
  1799.  
  1800.         tag:            tag of affected sector
  1801.         speed:          speed of move
  1802.         height:         relative height of move in pixels
  1803.  
  1804.         Relative ceiling move.
  1805.  
  1806.     41:Ceiling_RaiseByValue / tag / speed / height / arg4 /arg5
  1807.  
  1808.         tag:            tag of affected sector
  1809.         speed:          speed of move
  1810.         height:         relative height of move in pixels
  1811.  
  1812.         Relative ceiling move.
  1813.  
  1814.     42:Ceiling_CrushAndRaise / tag / speed / crush / arg4 / arg5
  1815.  
  1816.         tag:            tag of affected sector
  1817.         speed:          speed of move
  1818.         crush:          damage of crush
  1819.  
  1820.         Lowers ceiling to crush and raises (continual until stopped)
  1821.  
  1822.     43:Ceiling_LowerAndCrush / tag / speed / crush / arg4 / arg5
  1823.  
  1824.         tag:            tag of affected sector
  1825.         speed:          speed of move
  1826.         crush:          damage of crush
  1827.  
  1828.         Lowers ceiling to floor and stops.
  1829.  
  1830.     44:Ceiling_CrushStop / tag / arg2 / arg3 / arg4 / arg5
  1831.  
  1832.         tag:            tag of affected sector
  1833.  
  1834.         Stop a crushing ceiling.
  1835.  
  1836.     45:Ceiling_CrushRaiseAndStay / tag / speed / crush / arg4 / arg5
  1837.  
  1838.         tag:            tag of affected sector
  1839.         speed:          speed of move
  1840.         crush:          damage of crush
  1841.  
  1842.         Lowers ceiling to crush, raises and stays.
  1843.  
  1844.     69:Ceiling_MoveToValueTimes8 / tag / speed / height / negative / arg5
  1845.  
  1846.         tag:            tag of affected sector
  1847.         speed:          speed of move
  1848.         height:         absolute value in 8 pixel units of destination height
  1849.         negative:       boolean (true if height is negative)
  1850.  
  1851.         Moves ceiling to absolute height.
  1852.  
  1853.     95:FloorAndCeiling_LowerByValue / tag / speed / height / arg4 / arg5
  1854.  
  1855.         tag:            tag of affected sector
  1856.         speed:          speed of move
  1857.         height:         absolute value in 8 pixel units of destination height
  1858.  
  1859.         Relative move of both floor and ceiling.
  1860.  
  1861.     96:FloorAndCeiling_RaiseByValue / tag / speed / height / arg4 / arg5
  1862.  
  1863.         tag:            tag of affected sector
  1864.         speed:          speed of move
  1865.         height:         absolute value in 8 pixel units of destination height
  1866.  
  1867.         Relative move of both floor and ceiling.
  1868.  
  1869.     60:Plat_PerpetualRaise / tag / speed / delay / arg4 / arg5
  1870.  
  1871.         tag:            tag of affected sector
  1872.         speed:          speed of move
  1873.         delay:          delay before reversing direction
  1874.  
  1875.         Continually raises and lowers platform.
  1876.  
  1877.     61:Plat_Stop / tag / arg2 / arg3 / arg4 / arg5
  1878.  
  1879.         tag:            tag of affected sector
  1880.  
  1881.         Stops a PerpectualRaise platform.
  1882.  
  1883.     62:Plat_DownWaitUpStay / tag / speed / delay / arg4 / arg5
  1884.  
  1885.         tag:            tag of affected sector
  1886.         speed:          speed of move
  1887.         delay:          delay before reversing direction
  1888.  
  1889.         One cycle of lowering and raising.
  1890.  
  1891.     63:Plat_DownByValue / tag / speed / delay / height / arg5
  1892.  
  1893.         tag:            tag of affected sector
  1894.         speed:          speed of move
  1895.         delay:          delay before reversing direction
  1896.         height:         relative height in 8 pixel units
  1897.  
  1898.         Relative platform move.
  1899.  
  1900.     64:Plat_UpWaitDownStay / tag / speed / delay / arg4 / arg5
  1901.  
  1902.         tag:            tag of affected sector
  1903.         speed:          speed of move
  1904.         delay:          delay before reversing direction
  1905.  
  1906.         One cycle of raising and lowering.
  1907.  
  1908.     65:Plat_UpByValue / tag / speed / delay / height / arg5
  1909.  
  1910.         tag:            tag of affected sector
  1911.         speed:          speed of move
  1912.         delay:          delay before reversing direction
  1913.         height:         relative height
  1914.  
  1915.         Relative platform move.
  1916.  
  1917.     29:Pillar_Build / tag / speed / height / arg4 / arg5
  1918.  
  1919.         tag:            tag of affected sector
  1920.         speed:          speed of build
  1921.         height:         height (relative to floor) where
  1922.  
  1923.         Makes the floor meet the ceiling.
  1924.  
  1925.     30:Pillar_Open / tag / speed / f_height / c_height / arg5
  1926.  
  1927.         tag:            tag of affected sector
  1928.         speed:          speed of build
  1929.         f_height:       relative height to move floor down
  1930.         c_height:       relative height to move ceiling up
  1931.  
  1932.         Makes the floor and the ceiling meet by moving both.
  1933.  
  1934.     94:Pillar_BuildAndCrush / tag / speed / height / crush / arg5
  1935.  
  1936.         tag:            tag of affected sector
  1937.         speed:          speed of build
  1938.         height:         height (relative to floor) where floor meets ceiling
  1939.         crush:          damage from crushing
  1940.  
  1941.  
  1942.     Stair Specials
  1943.     --------------
  1944.  
  1945.     These stair building specials find the sector with 'tag' and
  1946.     build stairs by traversing adjacent sector marked with the
  1947.     StairSpecial1 and StairSpecial2.  These specials must alternate
  1948.     between the two and must not branch.
  1949.  
  1950.     26:Stairs_BuildDown / tag / speed / height / delay / reset
  1951.  
  1952.         tag:            tag of sector to start in
  1953.         speed:          speed of build [0.255]
  1954.         height:         height of step in pixels
  1955.         delay:          delay between steps in tics
  1956.         reset:          delay before stairs to reset (0==no reset)
  1957.  
  1958.     27:Stairs_BuildUp / tag / speed / height / delay / reset
  1959.  
  1960.         tag:            tag of sector to start in
  1961.         speed:          speed of build [0.255]
  1962.         height:         height of step in pixels
  1963.         delay:          delay between steps in tics
  1964.         reset:          delay before stairs to reset (0==no reset)
  1965.  
  1966.     31:Stairs_BuildDownSync / tag / speed / height / reset / arg5
  1967.  
  1968.         tag:            tag of sector to start in
  1969.         speed:          speed of build [0.255]
  1970.         height:         height of step in pixels
  1971.         reset:          delay before stairs to reset (0==no reset)
  1972.  
  1973.     32:Stairs_BuildUpSync / tag / speed / height / reset / arg5
  1974.  
  1975.         tag:            tag of sector to start in
  1976.         speed:          speed of build [0.255]
  1977.         height:         height of step in pixels
  1978.         reset:      delay before stairs to reset (0==no reset)
  1979.  
  1980.  
  1981.     Door Specials
  1982.     -------------
  1983.  
  1984.     10:Door_Close / tag / speed / arg3 / arg4 / arg5
  1985.  
  1986.         tag:            tag of affected sector or zero if line is part of door
  1987.         speed:          speed of move
  1988.  
  1989.         Closes a door sector.
  1990.  
  1991.     11:Door_Open / tag / speed / arg3 / arg4 / arg5
  1992.  
  1993.         tag:            tag of affected sector or zero if line is part of door
  1994.         speed:          speed of move
  1995.  
  1996.         Opens a door sector.
  1997.  
  1998.     12:Door_Raise / tag / speed / delay / arg4 / arg5
  1999.  
  2000.         tag:            tag of affected sector or zero if line is part of door
  2001.         speed:          speed of move
  2002.         delay:          delay before door lowers
  2003.  
  2004.     13:Door_LockedRaise / tag / speed / delay / lock / arg5
  2005.  
  2006.         tag:            tag of affected sector or zero if line is part of door
  2007.         speed:          speed of move
  2008.         delay:          delay before door lowers
  2009.         lock:           key number that will unlock door (see key numbers)
  2010.  
  2011.         Raises a door if correct key is in inventory of triggering player.
  2012.  
  2013.  
  2014.     Script Specials
  2015.     ---------------
  2016.  
  2017.     80:ACS_Execute / script / map / s_arg1 / s_arg2 / s_arg3
  2018.  
  2019.         script:         script number to execute
  2020.         map:            map which contains the script
  2021.  
  2022.     81:ACS_Suspend / script / map / arg3 / arg4 / arg5
  2023.  
  2024.         script:         script number to suspend
  2025.         map:            map which contains the script
  2026.  
  2027.     82:ACS_Terminate / script / map / arg3 / arg4 / arg5
  2028.  
  2029.         script:         script number to suspend
  2030.         map:            map which contains the script
  2031.  
  2032.     83:ACS_LockedExecute / script / map / s_arg1 / s_arg2 / lock
  2033.  
  2034.         script:         script number to suspend
  2035.         map:            map which contains the script
  2036.         lock:           key number needed to run script (see key numbers)
  2037.  
  2038.  
  2039.     Light Specials
  2040.     --------------
  2041.  
  2042.     110:Light_RaiseByValue / tag / value / arg3 / arg4 / arg5
  2043.  
  2044.         tag:            tag of affected sector
  2045.         value:          relative value of light level change
  2046.  
  2047.     111:Light_LowerByValue / tag / value / arg3 / arg4 / arg5
  2048.  
  2049.         tag:            tag of affected sector
  2050.         value:          relative value of light level change
  2051.  
  2052.     112:Light_ChangeToValue / tag / value / arg3 / arg4 / arg5
  2053.  
  2054.         tag:            tag of affected sector
  2055.         value:          absolute value of light level change
  2056.  
  2057.     113:Light_Fade / tag / value / tics / arg4 / arg5
  2058.  
  2059.         tag:            tag of affected sector
  2060.         value:          absolute value of light level change
  2061.         tics:           number of tics to fade to light level
  2062.  
  2063.     114:Light_Glow / tag / upper / lower / tics / arg5
  2064.  
  2065.         tag:            tag of affected sector
  2066.         upper:          brightest light level
  2067.         lower:          lowest light level
  2068.         tics:           number of tics between light changes
  2069.  
  2070.     115:Light_Flicker / tag / upper / lower / arg4 / arg5
  2071.  
  2072.         tag:            tag of affected sector
  2073.         upper:          brightest light level
  2074.         lower:          lowest light level
  2075.  
  2076.     116:Light_Strobe / tag / upper / lower / u-tics / l-tics
  2077.  
  2078.         tag:            tag of affected sector
  2079.         upper:          brightest light level
  2080.         lower:          lowest light level
  2081.         u-tics:         tics to stay at upper light level
  2082.         l-tics:         tics to stay at lower light level
  2083.  
  2084.  
  2085.     Miscellaneous Specials
  2086.     ----------------------
  2087.  
  2088.     121:Line_SetIdentification / line / arg2 / arg3 / arg4 / arg5
  2089.  
  2090.         line:           unique id of this line
  2091.  
  2092.         The script functions setlineblocking, setlinespecial, and
  2093.         setlinetexture use the ID specified here to identify lines.
  2094.  
  2095.     100:Scroll_Texture_Left  / speed / arg2 / arg3 / arg4 / arg5
  2096.  
  2097.     101:Scroll_Texture_Right / speed / arg2 / arg3 / arg4 / arg5
  2098.  
  2099.     102:Scroll_Texture_Up    / speed / arg2 / arg3 / arg4 / arg5
  2100.  
  2101.     103:Scroll_Texture_Down  / speed / arg2 / arg3 / arg4 / arg5
  2102.  
  2103.         speed:      speed of scroll in pixels
  2104.  
  2105.     129:UsePuzzleItem / item / script / s_arg1 / s_arg2 / s_arg3
  2106.  
  2107.         item:           item number needed to activate
  2108.         script:         script to run upon activation
  2109.  
  2110.         Runs a script upon use of appropriate puzzle item:
  2111.  
  2112.         0   ZZ_Skull
  2113.         1   ZZ_BigGem
  2114.         2   ZZ_GemRed
  2115.         3   ZZ_GemGreen1
  2116.         4   ZZ_GemGreen2
  2117.         5   ZZ_GemBlue1
  2118.         6   ZZ_GemBlue2
  2119.         7   ZZ_Book1
  2120.         8   ZZ_Book2
  2121.         9   ZZ_Skull2
  2122.         10  ZZ_FWeapon
  2123.         11  ZZ_CWeapon
  2124.         12  ZZ_MWeapon
  2125.         13  ZZ_Gear
  2126.         14  ZZ_Gear2
  2127.         15  ZZ_Gear3
  2128.         16  ZZ_Gear4
  2129.  
  2130.     140:Sector_ChangeSound / tag / sound / arg3 / arg4 /  arg5
  2131.  
  2132.         tag:            tag of sector to contain sound
  2133.         sound:          sound to be played - see sector sounds
  2134.  
  2135.     120:Radius_Quake / intensity / duration / damrad / tremrad / tid
  2136.  
  2137.         intensity:      strength of earthquake in richters [1..9]
  2138.         duration:       duration in tics [1..255]
  2139.         damrad:         radius of damage in 64x64 cells [0..255]
  2140.         tremrad:        radius of tremor in 64x64 cells [0..255]
  2141.         tid:            TID of map thing(s) for quake foci
  2142.  
  2143.         Creates an earthquake at all matching foci.
  2144.  
  2145.     138:Floor_Waggle / tag / amplitude / speed / delay / oscillations
  2146.  
  2147.         tag:            tag of sector to waggle
  2148.         amplitude:      height of change
  2149.         speed:          rate of change
  2150.         delay:          delay until start of change
  2151.         oscillations:   number of up/down cycles
  2152.  
  2153.         Creates an earthquake at all matching foci.
  2154.  
  2155.     74:Teleport_NewMap / map / position / arg3 / arg4 / arg5
  2156.  
  2157.         map:            map to teleport to
  2158.         position:       corresponds to destination player start spot arg0.
  2159.  
  2160.         Teleports the player to a new map and to the player start spot
  2161.         whose arg0 member matches 'position.'
  2162.  
  2163.     75:Teleport_EndGame / arg1 / arg2 / arg3 / arg4 / arg5
  2164.  
  2165.          Ends game and runs finale script.
  2166.          In deathmatch, teleports to level 1.
  2167.  
  2168.     70:Teleport / tid / arg2 / arg3 / arg4 / arg5
  2169.  
  2170.         tid:            TID of destination
  2171.  
  2172.         Teleports triggering object to MapSpot with tid.
  2173.  
  2174.     71:Teleport_NoFog / tid / arg2 / arg3 / arg4 / arg5
  2175.  
  2176.        Same as teleport, but silent with no fog sprite.
  2177.  
  2178.  
  2179.     Thing Specials
  2180.     --------------
  2181.  
  2182.     72:ThrustThing / angle / distance / arg3 / arg4 / arg5
  2183.  
  2184.         angle:          byte angle to thrust [0..255]
  2185.         distance:       distance to thrust
  2186.  
  2187.     73:DamageThing / damage / arg2 / arg3 / arg4 / arg5
  2188.  
  2189.         damage:         amount of damage
  2190.  
  2191.     130:Thing_Activate / tid / arg2 / arg3 / arg4 / arg5
  2192.  
  2193.         tid:            TID of thing to activate (see activatable things)
  2194.  
  2195.     131:Thing_Deactivate / tid / arg2 / arg3 / arg4 / arg5
  2196.  
  2197.         tid:            TID of thing to deactivate (see deactivatable things)
  2198.  
  2199.     132:Thing_Remove / tid / arg2 / arg3 / arg4 / arg5
  2200.  
  2201.         tid:            TID of thing to remove
  2202.  
  2203.     133:Thing_Destroy / tid / arg2 / arg3 / arg4 / arg5
  2204.  
  2205.         tid:            TID of affected thing
  2206.  
  2207.         Puts thing into its death state.
  2208.  
  2209.     134:Thing_Projectile / tid / type / angle / speed / vspeed
  2210.  
  2211.         tid:            TID of spawn location
  2212.         type:           Type of thing to spawn (see spawnable things)
  2213.         angle:          byte angle of projectile
  2214.         speed:          speed of projectile
  2215.         vspeed:         vertical speed
  2216.  
  2217.         Spawns a projectile.
  2218.  
  2219.     136:Thing_ProjectileGravity / tid / type / angle / speed / vspeed
  2220.  
  2221.         tid:            TID of spawn location
  2222.         type:           Type of thing to spawn (see spawnable things)
  2223.         angle:          byte angle of projectile
  2224.         speed:          speed of projectile
  2225.         vspeed:         vertical speed
  2226.  
  2227.         Spawns a projectile with gravity.
  2228.  
  2229.     135:Thing_Spawn / tid / type / angle / arg4 / arg5
  2230.  
  2231.         tid:            TID of spawn location
  2232.         type:           Type of thing to spawn (see spawnable things)
  2233.         angle:          byte angle of thing to face
  2234.  
  2235.         Spawns a thing.
  2236.  
  2237.     137:Thing_SpawnNoFog / tid / type / angle / arg4 / arg5
  2238.  
  2239.         tid:            TID of spawn location
  2240.         type:           Type of thing to spawn (see spawnable things)
  2241.         angle:          byte angle of projectile
  2242.  
  2243.         Spawns a thing silently.
  2244.  
  2245.  
  2246.     PolyObject Specials
  2247.     --------------------
  2248.  
  2249.     1:Polyobj_StartLine / po / mirror / sound / arg4 / arg5
  2250.  
  2251.         po:             refer to a particular polyobj
  2252.         mirror:         poly that will mirror the moves of this poly
  2253.         sound:          See Section 5:  Sector Sound
  2254.  
  2255.     2:Polyobj_RotateLeft / po / speed / angle / arg4 / arg5
  2256.  
  2257.         po:             polyobj
  2258.         speed:          speed
  2259.         angle:          byte angle to rotate
  2260.  
  2261.     3:Polyobj_RotateRight / po / speed / angle / arg4 / arg5
  2262.  
  2263.         po:             polyobj
  2264.         speed:          speed
  2265.         angle:          byte angle to rotate
  2266.  
  2267.     4:Polyobj_Move / po / speed / angle / distance / arg5
  2268.  
  2269.         po:             polyobj
  2270.         speed:          speed
  2271.         angle:          byte angle to move along
  2272.         distance:       byte distance to move
  2273.  
  2274.     5:Polyobj_ExplicitLine / po / order / mirror / sound / arg5
  2275.  
  2276.         po:             polyobj
  2277.         order:          rendering order of this line
  2278.         mirror:         poly that will mirror the moves of this poly
  2279.         sound:          See Section 5:  Sector Sound
  2280.  
  2281.     6:Polyobj_MoveTimes8 / po / speed / angle / distance / arg5
  2282.  
  2283.         po:             polyobj
  2284.         speed:          speed
  2285.         angle:          byte angle
  2286.         distance:       byte distance to move in units of 8
  2287.  
  2288.     7:Polyobj_DoorSwing / po / speed / angle / delay / arg5
  2289.  
  2290.         po:             polyobj
  2291.         speed:          speed
  2292.         angle:          byte angle
  2293.         delay:          delay in tics
  2294.  
  2295.     8:Polyobj_DoorSlide / po / speed / angle / distance / delay
  2296.  
  2297.         po:             polyobj
  2298.         speed:          speed
  2299.         angle:          byte angle
  2300.         distance:       byte distance
  2301.         delay:          delay in tics
  2302.  
  2303.     90:Polyobj_OR_RotateLeft  / po / speed / angle / arg4 / arg5
  2304.     91:Polyobj_OR_RotateRight / po / speed / angle / arg4 / arg5
  2305.     92:Polyobj_OR_Move        / po / speed / angle / distance / arg5
  2306.     93:Polyobj_OR_MoveTimes8  / po / speed / angle / distance / arg5
  2307.  
  2308.   The OR stands for OverRide.  As stated before, each poly can only be doing 
  2309.   a single action at a time.  This poses a problem with perpetual polyobjs, 
  2310.   since they are already moving, the designer cannot do anything else with 
  2311.   them.
  2312.  
  2313.   However, using these functions the designer can override the code to not
  2314.   allow a poly to concurrently execute more than one action, and force a poly
  2315.   to do the other action as well.
  2316.  
  2317.  
  2318. ┌───┬─────────────────────────────────────────────────────────────────────
  2319. │14 │ Sector Sounds for ChangeSectorSound() special:
  2320. └───┘
  2321.  
  2322.     1       heavy
  2323.     2       metal
  2324.     3       creak
  2325.     4       silence
  2326.     5       lava
  2327.     6       water
  2328.     7       ice
  2329.     8       earth
  2330.     9       metal2
  2331.  
  2332.  
  2333. ┌───┬─────────────────────────────────────────────────────────────────────
  2334. │15 │ Sounds for ThingSound()       (Added by SBS)
  2335. └───┘
  2336.  
  2337.    void thingsound(int tid, str name, int volume);
  2338.    -----------------------------------------------
  2339.  
  2340.    str name possible names (can be found in SNDINFO lump)
  2341.  
  2342.    ─────────────────────────────────────────
  2343.        PLAYER SOUNDS
  2344.    ─────────────────────────────────────────
  2345.  
  2346.    PlayerLand
  2347.    PlayerPoisonCough
  2348.    PlayerFallingSplat
  2349.  
  2350.    Fighter
  2351.    ──────────────
  2352.  
  2353.    PlayerFighterNormalDeath
  2354.    PlayerFighterCrazyDeath
  2355.    PlayerFighterExtreme1Death
  2356.    PlayerFighterExtreme2Death
  2357.    PlayerFighterExtreme3Death
  2358.    PlayerFighterPain
  2359.    PlayerFighterGrunt
  2360.    PlayerFighterFallingScream
  2361.    PlayerFighterBurnDeath
  2362.    PlayerFighterFailedUse
  2363.  
  2364.    FighterPunchMiss
  2365.    FighterPunchHitWall
  2366.    FighterPunchHitThing
  2367.    FighterAxeHitThing
  2368.    FighterHammerMiss
  2369.    FighterHammerHitWall
  2370.    FighterHammerHitThing
  2371.    FighterHammerContinuous
  2372.    FighterHammerExplode
  2373.    FighterSwordFire
  2374.    FighterSwordExplode
  2375.    FighterGrunt
  2376.  
  2377.    Cleric
  2378.    ──────────────
  2379.  
  2380.    PlayerClericNormalDeath
  2381.    PlayerClericCrazyDeath
  2382.    PlayerClericExtreme1Death
  2383.    PlayerClericExtreme2Death
  2384.    PlayerClericExtreme3Death
  2385.    PlayerClericPain
  2386.    PlayerClericGrunt
  2387.    PlayerClericFallingScream
  2388.    PlayerClericBurnDeath
  2389.    PlayerClericFailedUse
  2390.  
  2391.    ClericCStaffFire
  2392.    ClericCStaffExplode
  2393.    ClericCStaffHitThing
  2394.    ClericFlameFire
  2395.    ClericFlameExplode
  2396.    ClericFlameCircle
  2397.    HolySymbolFire
  2398.    SpiritActive
  2399.    SpiritAttack
  2400.    SpiritDie
  2401.  
  2402.    Mage
  2403.    ───────────
  2404.  
  2405.    PlayerMageNormalDeath
  2406.    PlayerMageCrazyDeath
  2407.    PlayerMageExtreme1Death
  2408.    PlayerMageExtreme2Death
  2409.    PlayerMageExtreme3Death
  2410.    PlayerMagePain
  2411.    PlayerMageGrunt
  2412.    PlayerMageFallingScream
  2413.    PlayerMageBurnDeath
  2414.    PlayerMageFailedUse
  2415.  
  2416.    MageWandFire
  2417.    MageLightningFire
  2418.    MageLightningContinuous
  2419.    MageLightningReady
  2420.    MageLightningZap
  2421.    MageShardsFire
  2422.    MageShardsExplode
  2423.    MageStaffFire
  2424.    MageStaffExplode
  2425.  
  2426.    Pig
  2427.    ──────────────
  2428.  
  2429.    PigActive1
  2430.    PigActive2
  2431.    PigPain
  2432.    PigAttack
  2433.    PigDeath
  2434.  
  2435.    ─────────────────────────────────────────
  2436.        MONSTER SOUNDS
  2437.    ─────────────────────────────────────────
  2438.  
  2439.    Bishop
  2440.    ──────────────
  2441.  
  2442.    BishopSight
  2443.    BishopActive
  2444.    BishopPain
  2445.    BishopAttack
  2446.    BishopDeath
  2447.    BishopMissileExplode
  2448.    BishopBlur
  2449.  
  2450.    Centaur
  2451.    ──────────────
  2452.  
  2453.    CentaurSight
  2454.    CentaurActive
  2455.    CentaurPain
  2456.    CentaurAttack
  2457.    CentaurDeath
  2458.    CentaurLeaderAttack
  2459.    CentaurMissileExplode
  2460.  
  2461.    Serpent
  2462.    ──────────────
  2463.  
  2464.    SerpentSight
  2465.    SerpentActive
  2466.    SerpentPain
  2467.    SerpentAttack
  2468.    SerpentMeleeHit
  2469.    SerpentDeath
  2470.    SerpentBirth
  2471.    SerpentFXContinuous
  2472.    SerpentFXHit
  2473.  
  2474.    Demon
  2475.    ──────────────
  2476.  
  2477.    DemonSight
  2478.    DemonActive
  2479.    DemonPain
  2480.    DemonAttack
  2481.    DemonDeath
  2482.    DemonMissileFire
  2483.    DemonMissileExplode
  2484.  
  2485.    Wraith
  2486.    ──────────────
  2487.  
  2488.    WraithSight
  2489.    WraithActive
  2490.    WraithPain
  2491.    WraithAttack
  2492.    WraithDeath
  2493.    WraithMissileFire
  2494.    WraithMissileExplode
  2495.  
  2496.    Maulator
  2497.    ──────────────
  2498.  
  2499.    MaulatorSight
  2500.    MaulatorActive
  2501.    MaulatorPain
  2502.    MaulatorHamSwing
  2503.    MaulatorHamHit
  2504.    MaulatorMissileHit
  2505.    MaulatorDeath
  2506.  
  2507.    Ettin
  2508.    ──────────────
  2509.  
  2510.    EttinSight
  2511.    EttinActive
  2512.    EttinPain
  2513.    EttinAttack
  2514.    EttinDeath
  2515.  
  2516.    Fire Demon
  2517.    ──────────────
  2518.  
  2519.    FireDemonSpawn
  2520.    FireDemonActive
  2521.    FireDemonPain
  2522.    FireDemonAttack
  2523.    FireDemonMissileHit
  2524.    FireDemonDeath
  2525.  
  2526.    Ice Guy
  2527.    ──────────────
  2528.  
  2529.    IceGuySight
  2530.    IceGuyActive
  2531.    IceGuyAttack
  2532.    IceGuyMissileExplode
  2533.  
  2534.    Sorcerer Boss
  2535.    ──────────────
  2536.  
  2537.    SorcererSight
  2538.    SorcererActive
  2539.    SorcererPain
  2540.    SorcererSpellCast
  2541.    SorcererBallWoosh
  2542.    SorcererDeathScream
  2543.    SorcererBishopSpawn
  2544.    SorcererBallPop
  2545.    SorcererBallBounce
  2546.    SorcererBallExplode
  2547.    SorcererBigBallExplode
  2548.    SorcererHeadScream
  2549.  
  2550.    Dragon
  2551.    ──────────────
  2552.  
  2553.    DragonSight
  2554.    DragonActive
  2555.    DragonWingflap
  2556.    DragonAttack
  2557.    DragonPain
  2558.    DragonDeath
  2559.    DragonFireballExplode
  2560.  
  2561.    Korax
  2562.    ──────────────
  2563.  
  2564.    KoraxSight
  2565.    KoraxActive
  2566.    KoraxPain
  2567.    KoraxAttack
  2568.    KoraxCommand
  2569.    KoraxDeath
  2570.    KoraxStep
  2571.  
  2572.    Korax Voice sounds
  2573.    ──────────────────
  2574.  
  2575.    KoraxVoiceGreetings
  2576.    KoraxVoiceReady
  2577.    KoraxVoiceBlood
  2578.    KoraxVoiceGame
  2579.    KoraxVoiceBoard
  2580.    KoraxVoiceWorship
  2581.    KoraxVoiceMaybe
  2582.    KoraxVoiceStrong
  2583.    KoraxVoiceFace
  2584.  
  2585.    Alternate monster pain sound (in gas cloud, lightning zapped, wraithverged)
  2586.  
  2587.    PuppyBeat
  2588.  
  2589.    ─────────────────────────────────────────
  2590.        WORLD SOUNDS
  2591.    ─────────────────────────────────────────
  2592.  
  2593.    Platform Sounds
  2594.    ──────────────
  2595.  
  2596.    PlatformStart
  2597.    PlatformStartMetal
  2598.    PlatformStop
  2599.    StoneMove
  2600.    MetalMove
  2601.  
  2602.    Door Sounds
  2603.    ──────────────
  2604.  
  2605.    DoorOpen
  2606.    DoorLocked
  2607.  
  2608.    DoorOpenMetal
  2609.    DoorCloseMetal
  2610.    DoorCloseLight
  2611.    DoorCloseHeavy
  2612.    DoorCreak
  2613.  
  2614.    ─────────────────────────────────────────
  2615.        MISCELLANEOUS SOUNDS
  2616.    ─────────────────────────────────────────
  2617.  
  2618.    BatScream
  2619.    BellRing
  2620.    BlastRadius
  2621.  
  2622.    Chat
  2623.    ClockTick
  2624.  
  2625.    Drip
  2626.  
  2627.    EarthStartMove
  2628.    Earthquake
  2629.    EtherealTeleport
  2630.  
  2631.    Fireball                generic fireball projectile
  2632.    FlyBuzz
  2633.    FreezeDeath
  2634.    FreezeShatter
  2635.  
  2636.    FlechetteBounce
  2637.    FlechetteExplode
  2638.  
  2639.    GlassShatter
  2640.  
  2641.    IceStartMove
  2642.    Ignite
  2643.  
  2644.    LavaMove
  2645.    LavaSizzle
  2646.  
  2647.    MysticIncant            attached to each player affected
  2648.  
  2649.    PickupWeapon
  2650.    PickupArtifact
  2651.    PickupKey
  2652.    PickupItem
  2653.    PickupPiece             Pickup part of the final weapon
  2654.    PoisonShroomPain
  2655.    PoisonShroomDeath
  2656.    PotteryExplode
  2657.    PuzzleFailFighter
  2658.    PuzzleFailCleric
  2659.    PuzzleFailMage
  2660.    PuzzleSuccess
  2661.  
  2662.    Respawn
  2663.    RopePull
  2664.  
  2665.    SludgeGloop
  2666.    StartupTick
  2667.    SuitofArmorBreak
  2668.    Switch1
  2669.    Switch2
  2670.    SwitchOtherLevel
  2671.  
  2672.    Teleport
  2673.    ThrustSpikeRaise
  2674.    ThrustSpikeLower
  2675.    ThunderCrash
  2676.    TreeBreak
  2677.    TreeExplode
  2678.  
  2679.    UseArtifact
  2680.  
  2681.    ValveTurn
  2682.  
  2683.    WaterMove
  2684.    WaterSplash
  2685.    WeaponBuild             Built the final weapon
  2686.    Wind
  2687.  
  2688.    Ambient sounds
  2689.    ──────────────
  2690.  
  2691.    Ambient1                insects1
  2692.    Ambient2                crkets
  2693.    Ambient3                crkets1
  2694.    Ambient4                katydid
  2695.    Ambient5                frogs
  2696.    Ambient6                owl
  2697.    Ambient7                bird
  2698.    Ambient8                shlurp
  2699.    Ambient9                bubble
  2700.    Ambient10               drop2
  2701.    Ambient11               rocks
  2702.    Ambient12               chains
  2703.    Ambient13               gong
  2704.    Ambient14               steel1
  2705.    Ambient15               steel2
  2706.  
  2707.  
  2708. ┌───┬─────────────────────────────────────────────────────────────────────
  2709. │16 │ Key Numbers
  2710. └───┘
  2711.  
  2712.     These are referenced by the DoorRaiseLocked() and ACS_ExecuteLocked()
  2713.     specials.
  2714.  
  2715.     1   steel key
  2716.     2   cave key
  2717.     3   axe key
  2718.     4   fire key
  2719.     5   emerald key
  2720.     6   dungeon key
  2721.     7   silver key
  2722.     8   rusted key
  2723.     9   horn key
  2724.     10  swamp key
  2725.     11  castle key
  2726.  
  2727.   ───────────────────── End of Specs ────────────────────────────────────
  2728.